嗨!週二大家好!今天是 DevOpsDay 的第二天,滿滿兩天的議程收穫豐富!回家後繼續看書寫文章拉!這裡是今天讀的原文出處:The Production Environment at Google, from the Viewpoint of an SRE,那我們就開始吧!
承如昨天提到,Google 並不會將軟體服務放在特定的硬體上,而是使用 Borg 來管理這些硬體設備,那麼究竟什麼是 Borg 呢?
Borg 是 Google 內部的大型集群管理器,負責運行用戶提交的 Job,而這個 Job 又由一個或是多個 Task 所組成。多個機器組成一個 Cell,每個 Job 運行在一個 Cell 當中。
根據上圖,我們可以得知 Borg 是一個 server/agent 架構,主要包含 BorgMaster 與 Borglet。
Borgmaster 由兩個程序組成:
主程序處理客戶的遠程過程調用 (RPCs),管理所有系統對象的狀態機,並提供 Web UI 來備份到 Sigma。BorgMaster 被複製五次並且保持著大部分的單元狀態。一個由 Paxos 選出的主節點負責所有改變單元狀態的運營。主節點的狀態被稱為 checkpoint,用於記錄狀態並做模擬和調試。此外,BorgMaster 還有一個高真實性的模擬器 Fauxmaster,用於讀取 checkpoint 文件並進行故障調試和容量計劃。
Borglet 是每個機器上的本地 Borg 代理,負責任務的啟動、停止和重啟,並管理本地資源。BorgMaster 負責監控和控制 Borglet 和機器的狀態。訊息傳遞通過 BorgMaster 的複製進行分片處理,為了增加韌性,Borglet 會一直上報完整的狀態,而 BorgMaster 則只更新差異的部分。若 Borglet 無法回應 BorgMaster,則該機器被標記為失效,其任務會被重新調度到其它機器,同時殺掉重復的任務。但如果 Borglet 與 BorgMaster 失去聯絡,那麼當前正在運行的任務和服務仍將繼續運行。
由於硬體設備跟軟體服務不再是一對一的關係,因此我們就沒辦法像在自家設備上開一個 IP,讓別人透過 IP 來存取某一項指定服務。這時候就需要 BNS(Borg name service)。當其他 Task 連接到某個 Task 時,使用 BNS 名稱建立連接,BNS 系統負責將這個名稱轉換成具體的 IP 地址和端口進行連接。
如果已經有在使用 Kubernetes 的小夥伴應該會覺得非常熟悉,除了 Borg 聲明式的資源使用方式、尋址,還有架構都十分類似。今天看到參考資料的那份 PDF 檔,為之驚艷,明天讓我插個題先研究一下 XD!明天繼續跟 Borg 奮鬥!掰噗!